Seminário sobre Perl - 2/2012
Alunos do Grupo *Gabrielly Ferreira - 09/0114817 *Hermano Portella - 10/0012469 *Lucas Fernandes - 10/0111823 *Rafael Sardenberg - 10/0019706 *Thales Vinkler - 10/0050638 O que é Perl? O Perl é uma linguagem de programação de uso geral, originalmente desenvolvida para manipulação de textos, que agora é utilizada para uma infinidade de tarefas incluindo administração de sistemas, desenvolvimento web, programação de redes, desenvolvimento de interfaces gráficas, e muitos outros. A linguagem foi escrita para ser prática (fácil de utilizar, eficiente, completa) ao invés de bonita (pequena, elegante, mínima). Suas maiores características são sua facilidade de uso, que inclui o suporte tanto para programação procedural quanto para programação orientada à objetos, tem um poderoso suporte incluso na linguagem para processamento de textos, e uma das maiores coleções de módulos escritos por terceiros, o CPAN. História da Linguagem Criada por Larry Wall em dezembro de 1987, a origem do Perl remonta ao shell scripting, AWK e linguagem C, estando disponível para praticamente todos os sistemas operacionais, embora seja usado mais comumente em sistemas Unix e compatíveis. Originalmente, o nome foi posto por Larry Wall em referência à Parábola da Pérola, de Mateus 13 (a grafia foi mudada de "Pearl" para "Perl" por já ter sido registrada por outra linguagem de programação). Algumas possíveis expansões foram posteriormente propostas, como Practical Extraction and Report Language e Pathologically Eclectic Rubbish Lister, este último tendo sido proposto pelo próprio Larry Wall, conhecido por sua personalidade sarcástica e criativa. Características da Linguagem No geral, a sintaxe de um programa em Perl se parece muito com a de um programa em C: existem variáveis, expressões, atribuições, blocos de código delimitados, estruturas de controle e sub-rotinas. Além disso, Perl foi bastante influenciado pelas linguagens de shell script: todas as variáveis escalares são precedidas por um cifrão ($). Essa marcação permite identificar perfeitamente as variáveis num programa, onde quer que elas estejam. Um dos melhores exemplos da utilidade desse recurso é a interpolação de variáveis diretamente no conteúdo de strings. Perl também possui muitas funções integradas para tarefas comuns como ordenação e acesso de arquivos em disco. Perl pega emprestado as listas de Lisp, as arrays associativas (tabelas hash) de awk e as expressões regulares de sed. Isso tudo simplifica e facilita qualquer forma de interpretação e tratamentos de textos e dados em geral. A linguagem suporta estruturas de dados arbitrariamente complexas. Ela também possui recursos vindos da programação funcional (as funções são vistas como um outro valor qualquer para uma subrotina, por exemplo) e um modelo de programação orientada a objetos. Perl também possui variáveis com escopo léxico, que tornam mais fácil a escrita de código mais robusto e modularizado. Todas as versões de Perl possuem gerenciamento de memória automático e tipagem dinâmica. Os tipos e necessidades de cada objeto de dados no programa são determinados automaticamente; memória é alocada ou liberada de acordo com o necessário. A conversão entre tipos de variáveis é feita automaticamente em tempo de execução e conversões ilegais são erros fatais. Critérios de Avaliação de Linguagem Legibilidade *''Instruções de Controle'' Em Perl, uma sequencia de declarações que definem um escopo é chamada de BLOCO. Os Blocos estão sempre limitados por chaves. Perl tem as estruturas básicas esperadas em qualquer linguagem de programação: - if - while : executa enquanto True - for - until: executa enquanto False - Unless Perl tira boas idéias de linguagens naturais, como a possibilidade de inverter a ordem dos elementos em uma frase. Por exemplo: if ($DEBUG) { print "ouch!"; } Pode ser reescrita como: print "ouch!" if $DEBUG; Como ocorre em C, o if , e no caso de perl o unless tambem, pode ser precedido de quantos elseif forem necessários, porém é importante você pensar duas vezes antes de fazer isso, assim como quem vai ler seu código irá pensar duas vezes antes de entender o que você está querendo dizer. LOOPs - For Como em C, em Perl existem os loops do tipo for. Olhando de outra maneira, os loops do tipo for podem ser encarados como While. - Foreach *''Tipos de dados e estruturas:'' O Perl possui tres tipos de dados embutidos: Escalar : é uma string, de qualquer tamanho limitada apenas pela memória disponível, um número ou uma referência para um array. Em Perl tudo é ou um escalar, ou um array de escalares ou um hash de escalares. “Um escalar não precisa ser necessariamente uma coisa ou outra, ele pode ser um tipo “string” ou um tipo “referencia” ou um tipo “numero”, ou qualquer outra coisa. Isso é possível pois há a conversão automatica de tipo e as operações que retornam o tipo escalar não ligam se você está manipulando uma string ou um numero, ou qualquer outra coisa. Perl é contextualmente polimórfica”. (iniciado com $). Exemplos: $num $joe $pointer arrays de escalares: arrays comuns são listas ordenadas de escalares indexadas por número começando do 0. (iniciado com @) Exemplos: @v @list @variable hashes (arrays associativos de escalares): são coleções de escalares não ordenados, indexados pela sua chave escolhida. (iniciado com %) Exemplos: %people %x %this_is_a_hash Existem tambem os tipo Handle e sub-rotinas Handle: é um mapeamento para um arquivo, dispositivo ou pipe, que é aberto para leitura, escrita, ou ambos Sub-rotina: é um trecho de código que pode ser executado, para o qual podem ser passados argumentos, e do qual podem ser recebidos resultados (iniciado com &). *''Formação do nome das Variáveis:'' Todas as variáveis são iniciadas por um caracter especial que indica para que tipo de estrutura de dados ela aponta. Nos tres casos citados os caracteres especiais são $, @ e %, respectivamente. Outro ponto importante de ser ressaltado é que cada variável possui o seu namespace, ou seja, você pode nomear um escalar, um array e um hash com os mesmos nomes que isso não causará conflito. O Perl é Case Sensitive. Regra de formação de nomes de variáveis: Usualmente é formado por caracter especial ($, @, %) + letra|underscore + letra|underscore|dígito , mas há casos em que pode ser formado por C.E.($,@,%) + dígito + dígito, apenas, não podendo neste caso o nome conter letra ou underscore. E há casos que o nome não é iniciado nem por uma letra, nem por um underscore, nem por um dígito; nesse caso o nome se limita a ter apenas um caracter. (Esse é um caso especial que é usado para se referir ao id do processo corrente). *''Aspectos da Sintaxe:'' O programa em Perl é um conjunto de declarações e estados que são executados de cima para baixo. Estruturas de controle como loops nos levam a pular de um ponto para outro dentro do código. Não depende da identação correta e espaços em branco servem apenas para separar os tokens. Muitos das estruturas são opcionais, aumentando a capacidade de escrita o que deixa a maioria dos programadores bem confortaveis para programar na linguagem Perl pega emprestado vários conceitos e sintaxes de outras linguagens como awk, sed, C, Bourne Shell, Smalltalk, Lisp, enquanto várias linguagens tambem usam elementos da linguagem Perl. Como a maioria dos alunos do curso estão mais acustumados a verem a sintaxe de C é provável que perl lhes parece bastante familiar.Nele existem alem da variáveis já discutidas, expressões, atribuições, blocos de código delimitados, estruturas de controle e sub-rotinas. Das demais linguagens listadas ele pega emprestado as listas de Lisp, as arrays associativas (tabelas hash) de awk e as expressões regulares de sed. Isso tudo simplifica e facilita qualquer forma de interpretação e tratamentos de textos e dados em geral. Só é preciso declarar formatos de relatórios e sub-rotinas, as vezes nem elas precisam ser. Se uma variável é declarada como undefinida (undef) ela é encarada como um 0, caso seja tratado com um número, como m espaço vazio, caso seja tratada com string e como um erro fatal, caso seja tratada como uma referência. ela será encarada dessa maneira até que um valor definido (def) seja atribuida a ela. A linguagem suporta estruturas de dados arbitrariamente complexas. Ela também possui recursos vindos da programação funcional (as funções são vistas como um outro valor qualquer para uma subrotina, por exemplo) e um modelo de programação orientada a objetos. Perl também possui variáveis com escopo léxico, que tornam mais fácil a escrita de código mais robusto e modularizado. Todas as versões de Perl possuem gerenciamento de memória automático e tipagem dinâmica. Os tipos e necessidades de cada objeto de dados no programa são determinados automaticamente; memória é alocada ou liberada de acordo com o necessário. Capacidade de Escrita No geral, a sintaxe de um programa em Perl se parece muito com a de um programa em C: existem variáveis, expressões, atribuições, blocos de código delimitados, estruturas de controle e sub-rotinas. Um programador de C pode começar ´quase' de imediato a programar em perl, desde que não use estruturas, apontadores, não declare as variáveis e saiba que uma variável é, 'sempre', precedida de um '$'. No entanto, a menos que queira tornar a execução mais lenta. O que se pretende, com estas afirmações, é evidenciar a flexibilidade do PERL e os diversos graus de complexidade/simplicidade de escrita de código possíveis com esta linguagem. Logo, um principiante, deve começar, geralmente, por utilizar construções simples e, com o tempo, evoluir para construções mais complicadas, mas que simplificam o código. Isto é, o código resultante (nº de linhas, nº de instruções, nº de funções, nº de expressões, nº de parênteses -- curvos -- etc) diminui mas as construções são mais crípticas, logo mais complexas de escrever/ler. Além disso, Perl foi bastante influenciado pelas linguagens de shell script: todas as variáveis scalares são precedidas por um cifrão ($). Essa marcação permite identificar perfeitamente as variáveis num programa, onde quer que elas estejam. Um dos melhores exemplos da utilidade desse recurso é a interpolação de variáveis diretamente no conteúdo de strings. Perl também possui muitas funções integradas para tarefas comuns como ordenação e acesso de arquivos em disco. Perl pega emprestado as listas de Lisp, as arrays associativas (tabelas hash) de awk e as expressões regulares de sed. Isso tudo simplifica e facilita qualquer forma de interpretação e tratamentos de textos e dados em geral. A linguagem suporta estruturas de dados arbitrariamente complexas. Ela também possui recursos vindos da programação funcional (as funções são vistas como um outro valor qualquer para uma subrotina, por exemplo) e um modelo de programação orientada a objetos. Perl também possui variáveis com escopo léxico, que tornam mais fácil a escrita de código mais robusto e modularizado. Todas as versões de Perl possuem gerenciamento de memória automático e tipagem dinâmica. Os tipos e necessidades de cada objeto de dados no programa são determinados automaticamente; memória é alocada ou liberada de acordo com o necessário. A conversão entre tipos de variáveis é feita automaticamente em tempo de execução e conversões ilegais são erros fatais. Confiabilidade *''Verificação de Tipos:'' O interpretador/compilador do Perl é escrito em C, para cada tipo de variável no Perl, há um correspondente em C, a verificação de tipos ocorre, tornando a linguagem confiável. *''Aliasing:'' É utilizado no uso de pacotes, quando se declara a variável our, você define uma variável global que funciona como um alias para uma variável de pacote. O código exterior poderá chegar à variável real por meio de seu pacote, mas em todos os outros aspectos, our se comporta como my, deve se dar preferência ao uso de my se não for necessário uma variável global. Esse recurso facilita a limitação de uso de globais com a pragma use strict tornando o programa mais confiável, pois o strict protegerá como erros de runtime e compilação. *''Legibilidade e Capacidade de Escrita:'' A linguagem utiliza recursos de outras linguagens conhecidas como C, shell, awk, o que facilita a sua leitura e capacidade de escrita para os analistas que já conhecem as linguagens, Perl, tenta parecer com a linguagem natural, o que facilita também a legibilidade e capacidade de escrita. *''Tratamento de Exceção:'' A linguagem Perl não usa o termo "tratamento de exceção", mas incluem facilidades que permitem a implementação de uma funcionalidade similar. Existem vários módulos CPAN(Rede de Repositórios Perl) que facilitam para que se adicione try / catch palavras-chave e permitem fácil declaração hierarquica de classe de exceção, além de facilitar outras funcionalidades. Um exemplo muito usado é a seguinte linha de código: eval { some code here }; if( $@ ) { handle exception here }; Contudo essa linha de código é vulnerável à falta de exceções capturadas. Desse modo se pode usar a linha de código: eval { local $@; some code here; 1 } or do { handle exception here }; Custos *''Custo de treinamento:'' Existem cursos on-lines de fácil acesso, além disso na internet é fácil se encontrar diversos tutoriais passo-a-passo, que ensina desde o básico até o avançado, e por fim o Perl ainda possue uma comunidade que vem crescendo pelo mundo nos últimos anos, onde é possível se tirar dúvidas. *''Custo para escrever programas:'' Uma das características da linguagem é a sua facilidade de uso. Ela ainda possui suporte para tanto para programação procedural quanto para programação orientada a objeto. Desta forma programadores com experiência em linguagens similares, como C por exemplo, pode facilitar no processo de codificação. *'' Custo para compilar programas:'' O código Perl é compilado e depois interpretado, o que é bom pois combina o desenvolvimento rápido de uma linguagem interpretada, com a eficiência de execução de uma linguagem compilada. Porém esse fator acaba por tornar esta fase mais custosa. *''Custo para executar programas:'' A execução da linguagem envolve blocos de inicialização que são ordenados em FIFO (First in, First out), e ao final do programa principal, o bloco de finalização são executados em ordem de LIFO (Last in, First out). *''Custo do sistema de implementação da linguagem:'' Perl é uma linguagem multiplataforma com forte suporte para processamento de textos, e é utilizada para várias tarefas como por exemplo: Administração de sistemas, desenvolvimento web, programação de redes, desenvolvimento de interfaces gráficas, entre outros. Além disso a linguagem ainda tem aplicação com Banco de dados. Tudo isso mostra que Perl é uma linguagem com um grande ambiente de desenvolvimento e implementação. *''Custo da manutenção dos programas e Legibilidade:'' Perl é uma linguagem com escopo léxico o que torna mais fácil a escrita de código mais robusto e modularizado, isso facilita a manutenção, assim como a legibilidade do programa. Outra facilidade que Perl apresenta nessa área é a questão que suas variáveis são precedidas pelo cifrão ($), o que ajuda na visualização e edição das mesmas. Perl é muito baseada na linguagem C, o que facilita a legibilidade para as pessoas que já estão familiarizados com a linguagem. Outros *''Portabilidade:'' A linguagem Perl já foi portada para mais de 100 diferentes plataformas e é bastante usada em desenvolvimento web, finanças e bioinformática. Outro forte da linguagem Perl é a vasta portabilidade, segue uma lista enorme de plataformas com portes ja feitos: Acorn, AIX, Amiga, Apple, Atari, AtheOS, BeOS, BSD, BSD/OS, Coherent, Compaq, Concurrent, Cygwin, DG/UX, Digital, DEC OSF/1, Digital UNIX, DYNIX/ptx, EPOC, EMC, FreeBSD, Fujitsu-Siemens, Guardian, HP, HP-UX, IBM, IRIX, Japanese, JPerl, Linux, LynxOS, Macintosh, Mac OS, Mac OS X, MachTen, Minix, MinGW, MiNT, MPE/iX, MS-DOS, MVS, NetBSD, NetWare, NEWS-OS, NextStep, Novell, NonStop, NonStop-UX, OpenBSD, ODT, OpenVMS, Open UNIX, OS/2, OS/390, OS/400, OSF/1, OSR, Plan 9, Pocket PC, PowerMAX, Psion, QNX, Reliant UNIX, RISCOS, SCO, SGI, Symbian, Sequent, Siemens, SINIX, Solaris, SONY, Sun, Stratus Tandem, Tru64, Ultrix, UNIX, U/WIN, Unixware, VMS, VOS, Win31, Win32, WinCE, WinMe, Windows 3.1, Windows 95/98/Me/NT/2000/XP, z/OS. Por fim, umas das maiores vantagens de Perl é a sua portabilidade, entretanto ela possui alguns problemas, que são devidamente divididos em cinco classes: #Dependência de módulos Perl específica da plataforma #Comandos do sistema operacional e IPC (inter-process communication) #Nomes de caminhos aproveitados do sistema operacional #Utilização de variáveis especiais que contêm informações específicas da plataforma #Funções que são implementadas de maneira diferente ou que não são implementadas por meio de plataformas As classes supracitadas não constituem uma lista definitiva de todos os problemas de portabilidade, são apenas os mais comuns. *''Qualidade da Definição:'' A documentação de Perl está sendo traduzida para português. É fácil ficar confuso. Embora uma pequena parte da dificuldade pudesse ser atribuída à implementação baseada em referências, era muito mais devido a ausência de documentação com exemplos escritos para o iniciante. A linguagem foi escrita para ser prática (fácil de utilizar, eficiente, completa) ao invés de bonita (pequena, elegante, mínima). Suas maiores características são sua facilidade de uso, que inclui o suporte tanto para programação procedural quanto para programação orientada à objetos, tem um poderoso suporte incluso na linguagem para processamento de textos, e uma das maiores coleções de módulos escritos por terceiros, o CPAN. Outras definições do Perl são dadas em L, L e sem dúvida em outros lugares. A partir destas informações, podemos determinar que Perl é uma coisa diferente para cada pessoa, mas muitas pessoas pensam que é, no mínimo interessante, escrever sobre ela. *''Generalidade:'' A utilidade, velocidade, flexibilidade e portabilidade de Perl tornaram-na ideal para a Word Wide Web. Sendo uma linguagem baseada em processamento de texto, e adaptável para manipular o meio baseado em textos da Web. Perl é particularmente eficaz no uso com o protocolo Common Gateway Interface, que possibilita que servidores da Web interajam com outras aplicações clientes sob a forma de conteúdo dinâmico. O advento do protocolo CGI quase instantaneamente transformou Perl de uma obscura ferramenta de administração de sistemas na mais amplamente linguagem de programação no lado dos servidores. Exemplos de Utilidades: - TWiki - Sistema Wiki de escrita de conteúdo colaborativo - RT - Sistema de processamento de Tickets - Apache Spam Assassin - Sistema extensível de filtro de Spam em email - dvd::rip - Programa para cópias de DVD - AWStats - "Advanced Web Statistics" (AWStats) é um sistema de análise de logs de servidores Web e de geração de estatísticas Resumidamente, a linguagem Perl é muito útil para o desenvolvimento de aplicações Web. *''Existência de Conflitos:'' Para evitar conflito com variáveis globais, é possivel declarar uma variável, visível no escopo local da seguinte forma: my VARIÁVEL;